#ifndef CHESSMIND2_H
#define CHESSMIND2_H

#include "chessdefines.h"

/*
 * 基于规则的算法集
 * 计算某点(m,n)达到五子连线的概率有多大。
 * 2 代表是第二代版本的算法，哈哈
 */
class ChessMind2
{
    /*
    * 检查棋局Grid中点(m,n)在方向(dx,dy)上的棋势，能够达到 N个子的可能性有多少
    * 算法：采用递归增加的方式，尝试逐步填子、计算棋子数，来达到计算棋势的目的
    * @return 0< value <1
    */    
    static float how(Vector2& grid, const int N, const int m, const int n, int dx, int dy);
    //计算进攻的机会
    static float chance(Vector2& grid, const int& m, const int& n, const float* val);
    //生成字节点的过滤算法：落子后生成一系列字节点（空格位置填子进行预测），空格棋子附近两个格内有棋子才是合法字节点

public:
    // 返回有效的空白落子点。
    static Map BlackFilter(Vector2& grid);
    //点(m,n)用于进攻，胜利的机会
    static float AttackChance(Vector2& grid, const int &m, const int &n);
    //点(m,n)被对手占用，我们防守的机会
    static float DefendChance(Vector2& grid, const int &m, const int &n);

};

#endif // CHESSMIND_H

